package main

import (
	"fmt"
	"gopractice/practice"
)

//go 的struct是值类型
type user struct {
	name  string
	email string
}

//使用值接受者
func (u user) notify() {
	fmt.Printf("Sending User Email To %s<%s>\n", u.name, u.email)
}

//使用指针接受者
func (u *user) changeEmail(email string) {
	u.email = email
}

func main() {
	practice.Main_defer_use()

	var a *int //定义了一个指向int类型的引用
	c := 2
	a = &c //取地址符&

	d := *a //通过*获得值
	c = 3
	fmt.Println(*a) // 输出2
	fmt.Println(d)  // 输出2

	//user类型的值可以调用
	bill := user{"Bill", "bill@email.com"}
	bill.notify()

	//指向user类型值的指针也可以调用
	lisa := &user{"Lisa", "lisa@mailcom"}
	lisa.notify()

	//user 类型的值也可以调用
	bill.changeEmail("bill@newdomian.com")
	bill.notify()

}
